var driverList; //	DIV со списком вродителей
var driversFooter; //	<p> с кнопкой добавления водителя и выбора Мультидрайв
var multiDriveFromButton = false; //	true, если функция удаления водителей вызвана через кнопку "выбрать мультидрайв"							
var multiDrive = false; //	Флаг, указывающий, что пользователь выбрал Мультидрайв
var city;
var carsXML = false;
//	Переменная для уникализации ссылок на xml файлы
var rand = new Date();
var xml;
var selectCar, select, selectCarAge, selectCarPower, carPrice;
var manufacturerName = '',
	carName = '',
	price = '',
	carAge = 'г.в.',
	carPower = '',
	selectedFr;
var cascoFinished = 0;
var countDrivers = 0;
var driverArray = [];
var expanded = false;
var osagoFirst = true; //	Флаг, что осаго считается в первый раз за сессию
var guarantee; //	checkbox с выбором пункта "Машина на гарантии"
var newCar; //	checkbox с выбором пункта "Новая машина"
var rus; //	Является ли машина Отечественного производства
var tabIndex = 100; //	Для таблуляции между input списка Водителей
var registeredUser = false;
var UserClickedCalculation = false;
var UserClickedAddToFavorites = false;
var kaskoDiscount = 0;
var osagoDiscount = 0;
var pe = false;
var pi = '';
var forbiddenCalculation = false;
//	ul элементы выпадающих списков
var carOptionLists;
//	Последний выделенный пункт выпадающего списка
var carOptionsActiveLi;
//	Необходимость пересчета точек на слайдере
var priceChanged = true;
var firstCalculation = true;
// Нужно ли делать скролл к таблице при пересчете
var toScroll = true;
// аналогично
var toResults = true;
//
var SKIndex = 0;
var emailText = '';
//	Список противоугонных систем для сохранения в БД и письма с заказом
var alarmText = '';
//	генерируемый URI ссылки на расчет Каско. Также для сохранениея в кукисах
var clientURL = '';
//	значение франшизы по умолчанию при загрузке сайта
var defaultFr = 20000;
var immobilizer, transponder, satellite, alarm0, alarm1, alarm2, alarm3, alarm5, alarm6;
var testVar = 0;
var defaultUrl = true;
var manList;

function checkRef() {
	var id;
	var arr;
	if ((getVarValueFromURL(document.location, "ref") != null || getVarValueFromURL(document.location, "i") != null) && getCookie("id") != null) {
		var refVal;
		if (getVarValueFromURL(document.location, "i") != null) 
			refVal = getVarValueFromURL(document.location, "i");
		else
			refVal = getVarValueFromURL(document.location, "ref");
		//			alert(getVarValueFromURL(document.location,"i"));
		arr = {
			action: "checkRef",
			ref: refVal,
			id: getCookie("id")
		}
	}
	$.post("post.php", arr, function (data) {});
}

function checkClientId() {
	if (testCookies()) {
		if (getCookie("id") == "") 
			setClientIdAndRefferer();
		else
			checkRef();
		registeredUser = true;
	}
}

function setClientIdAndRefferer() {
	var id;
	var arr;
	var referer = '';
	if (getVarValueFromURL(document.location, "ref") != null || getVarValueFromURL(document.location, "i") != null) {
		if (getVarValueFromURL(document.location, "ref") != null) referer = getVarValueFromURL(document.location, "ref");
		else
		referer = getVarValueFromURL(document.location, "i");
		arr = {
			action: "getId",
			ref: referer
		}
	} else arr = {
		action: "getId"
	};
	$.post("post.php", arr, function (data) {
		//			alert(data);
		var div = $("<div></div>");
		id = div.html(data).find("#newId").eq(0).text();
		if (typeof id != 'undefined' && id.length > 0) {
			var oDate = new Date();
			oDate.setFullYear(oDate.getFullYear() + 5);
			document.cookie = "id=" + id + "; expires=" + oDate.toGMTString();
		}
	}, "html");
	if ((typeof(id) != 'undefined') && id.length > 0) return true;
	else
	return false;
}

function deleteCarCookies() {
	var oDate = new Date();
	oDate.setFullYear(oDate.getFullYear() - 1);
	for (var i = 1; i < 6; i++) document.cookie = "car" + i + "=; expires=" + oDate.toGMTString();
}

function deleteCookie(name) {
	var oDate = new Date();
	oDate.setFullYear(oDate.getFullYear() - 1);
	document.cookie = encodeURI(name) + "=" + "; expires=" + oDate.toGMTString();
}

//	Установка флага, что пользователь начал расчет

function setClickedCalculation() {
	var arr = {
		action: "clickedCalculate",
		id: getCookie("id")
	}
	$.post("post.php", arr, function (data) {
		var div = $("<div></div>");
		id = div.html(data).find("#clicked").eq(0).text();
		if (typeof(id) == "string" && id.length > 0) UserClickedCalculation = true;
	}, "html");

	if (UserClickedCalculation) return true;
	else
	return false;
}

//	Установка флага, что пользователь нажал кнопку сделать заказ
function setClickedMakeOrder() {
	var arr = {
		action: "clickedMakeOrder",
		id: getCookie("id")
	};
	$.post("post.php", arr, function (data) {
		var div = $("<div></div>");
		id = div.html(data).find("#clicked").eq(0).text();
		if (typeof(id) == "string" && id.length > 0) UserClickedCalculation = true;
	}, "html");

	if (UserClickedCalculation) return true;
	else
	return false;
}

//	Разбор GET запроса
function getVarValueFromURL(url, varName) {
	var query = url.toString().substring(url.toString().indexOf('?') + 1);
	var vars = query.split("&");
	for (var i = 0; i < vars.length; i++) {
		var pair = vars[i].split("=");
		if (pair[0] == varName) return pair[1];
	}
	return null;
}

//   проверка на совпадение машин в кукисах

function checkCarCookieDublicate() {
	var oDate = new Date();
	oDate.setFullYear(oDate.getFullYear() + 5);
	var carArray = new Array();
	for (var i = 1; i < 6; i++)
	if (getCookie('car' + i) != '') carArray.push(getCookie('car' + i));
	for (var k = 0; k < carArray.length; k++) {
		carArray[k] = decodeURI(carArray[k]).split(',');
		if (carArray[k][1] == manufacturerName && carArray[k][2] == carName) {
			document.cookie = "car" + (k + 1) + "=" + (clientURL) + ',' + encodeURI(carArray[k][1]) + ',' + encodeURI(carArray[k][2]) + ',' + encodeURI(price) + ',' + "; expires=" + oDate.toGMTString();
			return k;
		}
	}
	return -1;
}

//   Обновление кукисов машины

function setCarCookies() {
	var oDate = new Date();
	oDate.setFullYear(oDate.getFullYear() + 5);
	var cookie = '' + document.cookie;
	var carArray = new Array();
	var cookieValue = clientURL + ',' + encodeURI(manufacturerName) + ',' + encodeURI(carName) + ',' + price;
	for (var i = 1; i < 6; i++)
	if (getCookie('car' + i) != '') carArray.push((getCookie('car' + i)));
	if (carArray.length == 5) carArray.pop();
	carArray.unshift(cookieValue);
	for (var k = 1; k <= carArray.length; k++)
	document.cookie = "car" + k + "=" + carArray[k - 1] + "; expires=" + oDate.toGMTString();
}

//   Проверка, нужно ли в вертикальном меню свернуть список
var toBlur = true;
var listToBlur;

//	Ссылка для обратного копирования

function getUrl() {
	alert($('#getParams').text());
}


//  Получаем кукис по его имени

function getCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(encodeURI(c_name) + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return document.cookie.substring(c_start, c_end);
		}
	}
	return "";
}

//	Выставление ссылок на предыдущие расчеты
function setPrevCalcs() {
	var carArray = new Array();
	var aHref = '<br style="line-height:5px;">';
	for (var i = 1; i < 6; i++){
		if (getCookie('car' + i) != '') 
			carArray.push((getCookie('car' + i)));
	}
	
	for (var k = 0; k < carArray.length; k++) {
		carArray[k] = carArray[k].split(',');
		aHref += '<a onclick="window.onbeforeunload=null;" href="./?' + (carArray[k][0]) + '">' + decodeURI(carArray[k][1]) + ' ' + decodeURI(carArray[k][2]) + ' ' + addSpaces(carArray[k][3]) + ' руб.' + '</a><br><br style="line-height:8px;">';
	}
	
	$('#prevCalc').html(aHref);
	
	if (carArray.length == 0) {
		$('#prevCalc').css('display', 'none');
	} else {
		$('#prevCalc').css('display', '');
	}
}

function doClear(theText) {
	if (theText.value == theText.defaultValue) {
		theText.value = ""
	}
}

function doDefault(theText) {
	if (theText.value == "") {
		theText.value = theText.defaultValue
	}
}

//	Получить значения скидок для клиента

function setDscnt() {
	kaskoDiscount = parseInt($("#kaskoDiscount").text());
	if (kaskoDiscount < 0) kaskoDiscount = 2;
	osagoDiscount = 0;
	pe = $("#pe").text();
}

//Функция загрузки параметров расчета из url
function setGUIfromGetParams() {
	var get = parseGet();
	if(!get) return;
	
	var urlGet = get['calculation'];
	if(!urlGet) return;
	 
	try {
		initSlider(100000, 1, 1);
		slider2.setValue(10000);
		//	Сначала инициализируем таблицу с параметрами ОСАГО
						
		var calculate = false;
		
		if (get['ref'] != undefined || get['i'] != undefined) 
			defaultUrl = false;
				
		urlGet = urlGet.split('+');
		
		for (var i = 0; i < urlGet.length; i++) {
			urlGet[i] = decodeURI(urlGet[i]).split('_');
		}
				
		defaultFr = getDefaultFr()
		
		//	alert(defaultFr);
		//  парсим url и заполняем параметры ТС
		for (var i = 0; i < urlGet.length; i++) {
			switch (urlGet[i][0]) {
				case "tm":
					calculate = true;
					var tmp = $('li', '#manufacturer-select');
					tmp.filter(function () {
						return $(this).text().toUpperCase().replace(/&/g, '').replace('-', '').replace(/\s/g, '').replace(/\./g, '').replace('(', '').replace(')', '') == urlGet[i][1].toUpperCase()
					}).eq(0).trigger('mousedown');
				break;
				case "car":
					calculate = true;
					var tmp = $('li', '#car-select');
					var carTMP = (urlGet[i][1].toUpperCase() == 'OTHER' ? '*' : urlGet[i][1].toUpperCase());
					tmp.filter(function () {
						return $(this).text().toUpperCase().replace(/&/g, '').replace(/\s/g, '').replace('(', '').replace(')', '').replace('-', '').replace(/\./g, '') == carTMP
					}).eq(0).trigger('mousedown');
				break;
				case "age":
					calculate = true;
					var tmp = $('li', '#car-age-select');
					tmp.filter(function () {
						return $(this).attr('id').toUpperCase() == ('carAge' + urlGet[i][1]).toUpperCase()
					}).eq(0).trigger('mousedown');
					$('#newCar').attr('checked', '');
					$('#guarantee').attr('checked', '');
				break;
				case "new":
					$('#newCar').attr('checked', 'checked');
				break;
				case "guarantee":
					$('#guarantee').attr('checked', 'checked');
				break;
				case "price":
					calculate = true;
					var tmp = $('#price');
					tmp.eq(0).val(addSpaces(urlGet[i][1]));
					tmp.trigger('blur');
				break;
				case "power":
					var tmp = $('li', '#car-power');
					tmp.filter(function () {
						return $(this).attr('id') == urlGet[i][1]
					}).eq(0).trigger('mousedown');
				break;
				case 'drivers':
					calculate = true;
					if (!multiDrive) {
						setMultiDrive();
						addDriverRowHTML();
					}
					k = parseInt((urlGet[i].length - 1) / 3);
					for (var m = 0; m < (k - 1); m++)
					addDriverRowHTML();
					var drListTMP = $('#driverList').find('.f-driver');
					var counter = 1;
					for (var m = 0; m < k; m++) {
						drListTMP.eq(m).find('input').eq(0).val(urlGet[i][counter]);
						counter++;
						drListTMP.eq(m).find('input').eq(1).val(urlGet[i][counter]);
						counter++;
						if (urlGet[i][counter] == 'm') drListTMP.eq(m).find('a').eq(0).click().mousedown();
						else drListTMP.eq(m).find('a').eq(1).click().mousedown();
						counter++;
					}
				break;
				case 'multiDrive':
					calculate = true;
					setMultiDrive();
				break;
				case 'oplata':
					$('input').filter('[name=oplata]').filter('[value=' + urlGet[i][1] + ']').attr('checked', 'checked');
				break;
				case 'fr':
					defaultFr  = parseInt(urlGet[i][1]);						
					defaultUrl = false;
				break;
				case 'sto':
					var s = $('input').filter('[name=sto]');
					switch (urlGet[i][1]) {
						case '1':
							s.filter('[value=0]').attr('checked', 'checked');
						break;
						case '2':
							s.filter('[value=1]').attr('checked', 'checked');
						break;
						case '3':
							s.filter('[value=3]').attr('checked', 'checked');
						break;
						case '4':
							s.filter('[value=4]').attr('checked', 'checked');
						break;
					}
				break;
				case 'helm':
					if (urlGet[i][1] == 'left') $('input').filter('[name=rightHelm]').attr('checked', '');
					if (urlGet[i][1] == 'right') $('input').filter('[name=rightHelm]').attr('checked', 'checked');
				break;
				case 'person':
					if (urlGet[i][1] == 'natural')   $("#naturalPerson").attr('checked', 'checked');
					if (urlGet[i][1] == 'corporate') $('#corporatePerson').attr('checked', 'checked');
				break;
				case 'bonusmalus':
					$('#noKaskoPayment').attr('checked', 'checked');
				break;
				case 'alarm':
					$("#chime").attr("checked", "");
					$("#immobilizer").attr("checked", "");
					for (var m = 1; m < urlGet[i].length; m++) {
						$('input').filter('[id=' + urlGet[i][m] + ']').attr('checked', 'checked');
						if ($('input').filter('[id=' + urlGet[i][m] + ']').eq(0).parent().css('display') == 'none') {
							$('input').filter('[id=' + urlGet[i][m] + ']').eq(0).parent().css('display', '');
							$('input').filter('[id=' + urlGet[i][m] + ']').eq(0).parent().prev().prev().attr('checked', 'checked');
						}
					}
				break;
				case 'city':
					if (urlGet[i][1] == 'spb') $('#spbTown').click();
					else $('#mscTown').click();
				break;
				case 'osago':
					loadOsagoOptions();
					var foundYear = $('.year').find('a').filter(function () {
						return $(this).text() == urlGet[i][1];
					});
					foundYear.eq(0).mousedown().click();
					foundYear = parseInt(foundYear.text());
					try {
						var oE = [$('#osagoFirstYear'), $('#osagoSecondYear'), $('#osagoThirdYear'), $('#osagoFourthYear'), $('#osagoFifthYear'), $('#osagoSixthYear'), $('#osagoSeventhYear')];
					} catch (eee) {
						alert('calc4:' + eee);
					}
					disableOsagoCalculation = true;
					for (var k = 0; k < foundYear - 1 && k < 10; k++)
					oE[k].find('div').filter(function () {
						return $(this).text().replace('+', '') == urlGet[i][k + 2]
					}).eq(0).mousedown().click();
					disableOsagoCalculation = false;
				break;
			}
		}
		
		if (calculate) 
			calculateCasko();
		
		return false;
	} catch (e) {
		alert('in OnURLLoad\n' + e.message + '\n' + e)
	}
}

$(document).ready( ////	Собственно, инициализация страницы после загрузки всех файлов	
	function () {
		//if($('#refId').text()!='neonet')
		//window.onbeforeunload=function(event){return "\n\nВы уверены, что хотите покинуть страницу?\n\n\n\n\nНе упустите свой шанс значительно сэкономить, сравнив цены!\n\n\n\n";}
		setPrevCalcs() //	Предыдущих предыдущих расчетов
		addDriverRowHTML(); //	добавляем 1 водителя
		
		$('#price').bind('keypress keydown keyup', function () {
			$('#price').val(addSpaces($('#price').val()))
		}) //	Форматирование  вводимого текста в поле стоимости машины
	
		preventSelection(document); //	Запрещаем выделение текста на сайте
		setDscnt(); //	Получаем с сервера значение скидки для скиента		
		
		//	$(document).bind('keyup',{combi:'Ctrl+u', disableInInput: false}, getUrl);	//	Инициализируем генерацию новых параметров расчета для брокера
		newCar = $('#newCar').eq(0); //	Получаем ссылку на checkbox "Новая машина"
	
		guarantee = $('#guarantee').eq(0); //	Получаем ссылку на checkbox "Машина на гарантии"
		
		if ($('#pe').text() == 'true') 
			pe = true;
		else 
			pe = false; //	Если есть реферер, запоминаем имя предоставляющего VIP скидку
			
		if ($('#pi').text().length > 0) 
			pi = $('#pi').text();
	
		initAlarmInputs(); //	Инициализируем сигналки
		$('#price').change(function () {
			priceChanged = true;
		}); //	при изменении стоимости выставляется флаг перерисовки линейки франшизы
		
		$('#tester2').change(function () {
			sliderSpaces();
		});
		
		sliderSpaces(); //	форматируем содержимое поля ввода франщизы
		checkClientId(); //	Ставим cookies для
		 
		$(document).keydown(function (event) {
			carOptionListsKeypress(event);
		}); //	Обработка клавиатуры для управления выпадающих списков для выбора машины/возраста/двигателя
	
		//  (?Deprecated?) Добавляем пересчет КАСКО при изменении значения бонус-малус		
		$('#countCrashes').change(function () {
			toScroll = false;
			$('#Span1').eq(0).css('display', 'none');
			calculateCasko();
		});
	
		//	Инициализация выбора года страхования осаго
		//	$("#f-osago-price2 .year a").click(function(){if(!$(this).hasClass("active")){$("#f-osago-price2 .year a").removeClass("active");$(this).addClass("active");}return false;});
		//	Инициализация выбора кол-ва аварий по ОСАГО
		//	$("#f-osago-price2 .avarii p a").click(function(){if(!$(this).hasClass("active")){$(this).parent().find("a").removeClass("active");$(this).addClass("active");}return false;});
	
		carOptionLists = $('.result_list'); //	Инициализация внутренних пременных для управления	выпадающими списками
		select         = $('#manufacturer-select');
		selectCar      = $('#car-select');
		selectCarAge   = $('#car-age-select');
		selectCarPower = $('#car-power');
		carPrice       = $('#price');
		
		//	обработчик событий: если произошел клик вне выпадающего списка, закрыть выдадающий список
		$('body').mousedown(function (event) {
			if ($(event.target).attr('class') != 'result_list  result_list_scrollable' && 
				$(event.target).attr('class') != 'selected_items' && 
				$(event.target).attr('name')  != 'list' && 
				$(event.target).parent().attr('name') != 'list') 
			{
				carOptionLists.css('display', 'none');
			} 
		});
	
		$.ajax({
			url: "cars.xml" + '?' + (rand % 1000),
			success: function (response) {
				xml = carsXML = $(response);
				if ($('#newForm').length == 1) newForm.loadCars(true);
				//	newForm.loadCars(false);
				//	Загружаем список марок машин
				select.empty();
	
				xml.find('m').each(function () {
					var manufacturer = $(this),
						name = manufacturer.children('n').text();
					var optionTMP = $('<li/>');
					optionTMP.attr('name', 'list');
					if (manufacturer.attr("favorite") == "favorite") name = '<span class="favoriteManufacturer">' + name + '</span>';
					if (manufacturer.attr("favorite") == "popular") name = '<span class="popularManufacturer">' + name + '</span>';
					optionTMP.html(name).appendTo(select);
				});
	
				//	выделение синим фоном элемента списка при наведении мышкой
				carOptionsActiveLi = $("li").eq(0);
								
				$('ul', carOptionLists).mouseover(function (event) {
					var target = $(event.target);
					
					if (target.attr('name') != 'list') 
						target = target.parent();
					
					if (target.attr('name') == 'list') { 
						if (carOptionsActiveLi != target) {
							carOptionsActiveLi.removeClass('active');
							carOptionsActiveLi = target;
							carOptionsActiveLi.addClass('active');
						}
					}
				});
				
				$('.selected_items').mousedown(function () {
					carOptionLists.css('display', 'none');
					if ($(this).parent().parent().parent().parent().parent().find('.results_container').children().eq(0).css('display') == 'none') {
						$(this).parent().parent().parent().parent().parent().find('.results_container').children().eq(0).css('display', '');
					} else {
						$(this).parent().parent().parent().parent().parent().find('.results_container').children().eq(0).css('display', 'none');
					}
				});
				
				$('.selector').mousedown(function (event) {
					if ($(event.target).attr('class') != 'selected_items')
						$(this).find('.selected_items').mousedown();
					return false;
				})
				
				$('.selected_items').focus(function () {
					carOptionLists.css('display', 'none');
					$(this).parent().parent().parent().parent().parent().find('.result_list').css('display', '');
	
				});
				
				$('ul', carOptionLists).mousedown(function (event) {
					carOptionLists.css('display', 'none');
					
					switch ($(this).attr('id')) {
						case 'manufacturer-select':
							//	Скрываем 2-ю часть калькулятора, пока не произведен первоначальный расчет
							hideCalculationResult();
		
							manufacturerName = $('.active', select).text();
							$('#manInput').text($(event.target).text());
							$('#carInput').css('color', 'black');
							$('#carAgeInput').css('color', '#A0A0A0');
							$('#powerInput').css('color', '#A0A0A0');
							//	Загружаем список машин
		
							var cars = xml.find('m>n').filter(function () {
								return $(this).text() == $(event.target).text()
							}).parent().find('cs>c>n');
							
							if (cars.length < 18) 
								$('#car-select').parent().css('height', cars.length * 19 + 1 + 'px')
							else
								$('#car-select').parent().css('height', '323px');
								
							$('#car-select').html('');
							
							$('#carInput').text('Модель');
							cars.each(function () {
								$('<li></li>').text($(this).text()).attr('name', 'list').appendTo(selectCar);
							});
						break;
						case 'car-select':
							$('#carInput').text($(event.target).text());
							carName = $(event.target).text();
							$('#carAgeInput').css('color', 'black');
						break;
						case 'car-age-select':
							$('#carAgeInput').text($(event.target).text());
							carAge = $(event.target).attr("id");
							$('#carAgeInput').css('color', 'black');
							if (carAge == "carAge0") {
								$('#Tr2').next().find('td').eq(0).css('display', '');
								$('#guarantee').eq(0).attr('checked', 'checked');
							} else {
								$('#Tr2').next().find('td').eq(0).css('display', 'none');
								$('#newCar').eq(0).attr('checked', '');
								if (carAge == "carAge1" || carAge == "carAge2" || carAge == "carAge3" || carAge == "carAge4") $('#guarantee').eq(0).attr('checked', 'checked');
							}
							$('#powerInput').css('color', 'black');
						break;
						case 'car-power':
							$('#powerInput').css('color', 'black');
							carPower = $(event.target).attr('id');
							$('#powerInput').text($(event.target).text());
							$('#pic-t-car').css('float', 'left');
							$('#price-Tip').css('float', 'left').css('display', '');
							$('#VIPFirstNote').css('top', '55px');
						break;
					}
				});
				
				$('#manInputWrapper').mousedown(function () {
					cChange.changed = true;
				});
				
				$('#carInputWrapper').mousedown(function () {
					cChange.changed = true;
				});
				
				$('#carAgeInputWrapper').mousedown(function () {
					cChange.changed = true;
				});

				$('#f-osago-price2').find('.year:first').find('a').mousedown(function () {
					$(this).siblings().attr('class', '');
					$(this).attr('class', 'active');
					var h = $("#crashCountHeaderText");
					
					if ($(this).text() == '1') 
						h.css('display', 'none');
					else
						h.css('display', '');
						
					currentOsagoYear = parseInt($(this).text()) - 1;
					setVisibilityOsagoCrashes();
					//		alert(currentOsagoYear);
					$('#os').css('height', 107 + (parseInt(currentOsagoYear) * 24) + 'px');
					calcOsago(osagoXML);
					return false;
				});
	
				var manLoaded = $('#manufacturer-select').parent().parent().parent().find('input');
				if (manLoaded.attr('value') == 'Загрузка машин...') manLoaded.attr('value', 'Марка');
				
				setGUIfromGetParams();	
			}
		});
		
		tooltip.init(); //	Инициализируем всплывающие подсказки
	}
);

